home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Utilities / Fonts / pcATMfont2Next / pfb2ps.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-12  |  2.0 KB  |  91 lines

  1. /* pfb2ps.c - Copyright 1991-05-12 Erik Wallin, d87-ewa@nada.kth.se.
  2.    This program may be distributed freely, modified or included in
  3.    other free programs long as this copyright notice is still
  4.    included.
  5.  
  6. pfb2ps is a filter for converting postscript fonts stored in a binary
  7. format used by PC-programs. (.PFM files) The output will be a plain
  8. text file.
  9.  
  10. Note that you have to pipe the .PFM file into pfb2ps. 
  11.  
  12.     pfb2ps <xxx.pfb >xxx.ps
  13. */
  14. #include <stdio.h>
  15. #include <sys/malloc.h>
  16.  
  17. #define HEX_PER_LINE 32
  18.  
  19. int getlen()
  20. {
  21.   int c1,c2,c3,c4;
  22.   c1 = getchar();
  23.   c2 = getchar();
  24.   c3 = getchar();
  25.   c4 = getchar();
  26.   return c1 + (256 * (c2 + 256 * (c3 + 256 * c4)));
  27. }
  28.  
  29.  
  30. void main ()
  31. {
  32.  int t, l, i;
  33.  unsigned char *buf;
  34.  
  35.  while(!feof(stdin))
  36.    {
  37.      if (getchar() != 128)
  38.        {
  39.      fprintf(stderr, "Magic number (128) not found or no input on stdin.\n");
  40.      exit (-1);
  41.        }
  42.      t = getchar();
  43.      fprintf(stderr, "Type: %d, ", t);
  44.      switch (t) {
  45.      case 1:
  46.        l = getlen();
  47.        fprintf(stderr, " plain text, length %d\n", l);
  48.        buf = (void *) malloc(l);
  49.        if (fread(buf, sizeof(unsigned char), l, stdin) != l)
  50.      {
  51.        fprintf(stderr, "Wrong length of ascii field: %d or could not read file.\n", l);
  52.        exit (-1);
  53.      }
  54.        if (fwrite(buf, sizeof(unsigned char), l, stdout) != l)
  55.      {
  56.        fprintf(stderr, "Could not write stdout.\n");
  57.        exit (-1);
  58.      }
  59.        free(buf);
  60.        break;
  61.      case 2:
  62.        l = getlen();
  63.        fprintf(stderr, " binary data, length %d\n", l);
  64.        buf = (void *) malloc(l);
  65.        if (fread(buf, sizeof(unsigned char), l, stdin) != l)
  66.      {
  67.        fprintf(stderr, "Wrong length of binary field: %d or could not read file.\n", l);
  68.        exit (-1);
  69.      }
  70.        for(i = 0;i < l ;i++)
  71.      {
  72.        printf("%2.2X", buf[i]);
  73.        if (!((i+1) % HEX_PER_LINE))
  74.          printf("\n");
  75.      }
  76.        printf("\n");
  77.        free(buf);
  78.        break;
  79.      case 3:
  80.        fprintf(stderr, "End of file\n");
  81.        exit(0);
  82.        break;
  83.      default:
  84.        {
  85.      fprintf(stderr, "Unknown field type: %d\n", t);
  86.      exit(-1);
  87.        }
  88.      }
  89.    }
  90. }
  91.